package cn.cjxy.javaweb.servlet.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/**
 *  Session与Cookie不同，session是属于服务器端的会话技术，数据是保存在服务器的内存中
 *  。每个会话中保存它自己的数据，其它会话不能访问。不同的会话之间不能实现数据的共享。
 *
 *       Session与Cookie的区别
 *   ● 1）Cookie属于客户端会话技术，数据保存在浏览器端文件中（磁盘），Cookie中键和值都是String类型
 *      ● 2）Session属于服务器端的会话技术，数据保存服务器内存中，Session中键是String，值是Object类型
 *
 *      ● 创建会话的方法：
 * 创建session	描述
 * HttpSession request.getSession()	作用：通过请求对象创建一个会话对象 如果当前用户会话不存在，创建会话。如果会话已经存在，这个方法返回已经存在的会话对象。
 * @author huangjie
 * @date 2025/9/29
 */
@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取会话对象
        HttpSession session = req.getSession();
        /**
         * 用户第1次访问，使用request.getSession()时创建一个会话对象HttpSession。
         * ● HttpSession相关API：
         * HttpSession接口方法	作用
         * String getId()	得到会话的ID，在服务器上唯一的32位的十六进制数
         * long getCreationTime()	表示会话创建的时间，返回long类型。表示1970-1-1到这个时间之间相差的毫秒数
         * long getLastAccessedTime()	表示会话上次访问的时间
         * boolean isNew()	判断当前是否是一个新的会话，是的返回true
         * ServletContext getServletContext()	通过会话得到上下文对象
         */
        String id = session.getId();
        long creationTime = session.getCreationTime();

        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("sessionid：   "+id);
        writer.println("session创建时间：   "+creationTime);
    }
}
